package com.sfj.system.enums;

/**
 * 督办任务状态枚举
 *
 * @author kaka
 * @Date 2025/07/01
 */
public enum TaskStatusEnum {
    /**
     * 待审核
     */
    REVIEW("review", "待审核",1),
    /**
     * 已撤回
     */
    WITHDRAW("withdraw", "已撤回",2),

    /**
     * 已驳回
     */
    REJECT("reject", "已驳回",3),

    /**
     * 未接收
     */
    NOT_RECEIVED("notReceived", "未接收",4),

    /**
     * 部分接收
     */
    RECEIVED("received", "部分接收",5),
    /**
     * 待处理
     */
    PROCESSING("processing", "待处理",6),

    /**
     * 部分处理
     */
    PROCESSED("processed", "部分处理",7), //todo 这个状态好像没用

    /**
     * 复核驳回
     */
    REJECT_REVIEW("rejectReview", "复核驳回",7),//todo 不直接使用 转换时使用

    /**
     * 部分待复核
     */
    PENDING_REVIEWING("pendingReviewing", "部分待复核",8),
    /**
     * 待复核
     */
    PENDING_REVIEW("pendingReview", "待复核",9),
    /**
     * 部分已复核
     */
    PENDING_REVIEWED("pendingReviewed", "部分已复核",10),
    /**
     * 有新反馈待复核
     */
    NEW_REVIEW("newReview", "有新反馈待复核",11),
    /**
     * 已复核
     */
    REVIEWED("reviewed", "已复核",12);

    private final String code;
    private final String description;
    private final int step;

    TaskStatusEnum(String code, String description, int step) {
        this.code = code;
        this.description = description;
        this.step = step;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    public int getStep() {
        return step;
    }

    /**
     * 根据code获取枚举
     */
    public static TaskStatusEnum getByCode(String code) {
        for (TaskStatusEnum status : values()) {
            if (status.getCode().equals(code)) {
                return status;
            }
        }
        return null;
    }

    /**
     * 判断指定状态(statusA)的step是否在[minStep, maxStep]之间（包含边界）
     * @param statusA 要检查的状态code
     * @param minStep 最小step值
     * @param maxStep 最大step值
     * @return true 如果statusA的step在[minStep, maxStep]之间
     */
    public static boolean isStatusBetween(String statusA, int minStep, int maxStep) {
        TaskStatusEnum enumA = getByCode(statusA);
        if (enumA == null) {
            return false; // 无效状态，返回false
        }
        int stepA = enumA.getStep();
        return stepA >= Math.min(minStep, maxStep) &&
                stepA <= Math.max(minStep, maxStep);
    }
}
